import { defineStore } from 'pinia';
import { v4 as uuidv4 } from 'uuid';

// 添加示例数据
const samplePosts = [
  {
    id: '1',
    title: '发现一个超棒的无障碍电梯',
    content: '今天在市中心商场发现了一个新安装的无障碍电梯，轮椅可以很方便地进出，操作按钮也很低，适合各种人群使用。分享给大家，希望对有需要的朋友有帮助！',
    images: ['/static/images/sample/elevator1.jpg', '/static/images/sample/elevator2.jpg'],
    tags: ['accessibility', 'share'],
    location: '城市中心商场',
    createdAt: new Date(Date.now() - 3600000 * 24).toISOString(), // 1天前
    likes: 15,
    isLiked: false,
    comments: [
      {
        id: '101',
        text: '太感谢了，这个信息对我妈妈帮助很大',
        createdAt: new Date(Date.now() - 3600000 * 12).toISOString(),
        userName: '小李'
      }
    ],
    username: '无障碍爱好者',
    avatar: '/static/images/avatars/user1.png'
  },
  {
    id: '2',
    title: '关于社区无障碍设施的建议',
    content: '我们小区的无障碍设施还不够完善，希望能在以下几个方面进行改进：1. 增加更多的坡道；2. 公共区域增加盲道；3. 电梯按钮增加盲文。这些设施对于行动不便的人和视障人士都非常重要！',
    tags: ['suggestion', 'accessibility'],
    location: '阳光小区',
    createdAt: new Date(Date.now() - 3600000 * 48).toISOString(), // 2天前
    likes: 28,
    isLiked: true,
    comments: [
      {
        id: '201',
        text: '完全同意，已经向物业反映了',
        createdAt: new Date(Date.now() - 3600000 * 40).toISOString(),
        userName: '社区管理员'
      },
      {
        id: '202',
        text: '希望这些建议能被采纳',
        createdAt: new Date(Date.now() - 3600000 * 20).toISOString(),
        userName: '关心社区'
      }
    ],
    username: '社区倡导者',
    avatar: '/static/images/avatars/user2.png'
  },
  {
    id: '3',
    title: '本周末无障碍设施体验活动',
    content: '本周末将在中央公园举办无障碍设施体验活动，欢迎大家参加！活动内容包括：轮椅体验、盲道行走体验、无障碍厕所使用指南等。通过亲身体验，让更多人了解无障碍设施的重要性。时间：本周六上午9点-下午4点',
    images: ['/static/images/sample/event.jpg'],
    tags: ['event', 'accessibility'],
    location: '中央公园',
    createdAt: new Date(Date.now() - 3600000 * 10).toISOString(), // 10小时前
    likes: 42,
    isLiked: false,
    comments: [],
    username: '无障碍协会',
    avatar: '/static/images/avatars/org1.png'
  },
  {
    id: '4',
    title: '西湖景区新增无障碍游览路线',
    content: '好消息！西湖景区最近新增了一条无障碍游览路线，全程约2公里，沿途设有盲道、轮椅坡道和无障碍厕所。特别适合带老人和行动不便的朋友一起游玩。路线起点在断桥，终点在雷峰塔，途经苏堤和白堤，风景非常优美。已经亲测过了，体验很好！',
    images: ['/static/images/sample/scenic1.jpg', '/static/images/sample/scenic2.jpg'],
    tags: ['share', 'accessibility'],
    location: '西湖景区',
    createdAt: new Date(Date.now() - 3600000 * 72).toISOString(), // 3天前
    likes: 56,
    isLiked: false,
    comments: [
      {
        id: '401',
        text: '太棒了！终于可以带我爷爷去西湖玩了',
        createdAt: new Date(Date.now() - 3600000 * 70).toISOString(),
        userName: '快乐小旅行'
      }
    ],
    username: '城市探索者',
    avatar: '/static/images/avatars/user3.png'
  },
  {
    id: '5',
    title: '无障碍卫生间使用体验分享',
    content: '今天想分享一下最近使用无障碍卫生间的体验。发现城市里很多商场的无障碍卫生间都被当成了储物间，或者门被锁住了。希望能引起重视，无障碍设施不应该只是为了应付检查，而是要真正发挥作用。以下是我建议做得比较好的几家商场：1. 万达广场 2. 银泰城 3. 龙湖天街',
    tags: ['problem', 'suggestion'],
    location: '城市中心区域',
    createdAt: new Date(Date.now() - 3600000 * 36).toISOString(), // 1.5天前
    likes: 89,
    isLiked: true,
    comments: [
      {
        id: '501',
        text: '这个问题确实很普遍',
        createdAt: new Date(Date.now() - 3600000 * 35).toISOString(),
        userName: '关注无障碍'
      },
      {
        id: '502',
        text: '建议大家发现这种情况可以向商场客服投诉',
        createdAt: new Date(Date.now() - 3600000 * 30).toISOString(),
        userName: '权益倡导者'
      },
      {
        id: '503',
        text: '已经向城市管理部门反映了这个问题',
        createdAt: new Date(Date.now() - 3600000 * 24).toISOString(),
        userName: '社区管理员'
      }
    ],
    username: '轮椅旅行者',
    avatar: '/static/images/avatars/user4.png'
  }
];

export const usePostStore = defineStore('post', {
  state: () => ({
    posts: [],
  }),
  
  getters: {
    getAllPosts: (state) => {
      return state.posts.sort((a, b) => new Date(b.createdAt) - new Date(a.createdAt));
    },
    
    getPostById: (state) => (id) => {
      return state.posts.find(post => post.id === id);
    }
  },
  
  actions: {
    // 初始化帖子数据
    initSamplePosts() {
      // 先尝试从存储加载
      this.loadPostsFromStorage();
      
      // 只有当没有现有帖子时才添加示例帖子
      if (this.posts.length === 0) {
        this.posts = [...samplePosts];
        this.savePostsToStorage();
      }
    },
    
    addPost(postData) {
      try {
        console.log('添加新帖子:', postData);
        
        // 验证必要字段是否存在
        if (!postData.title || !postData.content) {
          console.error('帖子数据缺少必要字段');
          return null;
        }
        
        // 处理图片路径，确保使用伪图片
        let processedImages = [];
        if (postData.images && postData.images.length > 0) {
          processedImages = postData.images.map((img, index) => {
            // 如果是本地临时文件，替换为伪图片URL
            if (img.startsWith('file://') || img.startsWith('/storage/') || img.startsWith('/tmp/')) {
              // 使用固定的伪图片替代本地图片路径
              return `https://picsum.photos/id/${(index + 10) * 5}/800/600`;
            }
            return img;
          });
        }
        
        const newPost = {
          id: uuidv4(),
          createdAt: new Date().toISOString(),
          likes: 0,
          isLiked: false,
          comments: [],
          username: '我', // 当前用户发布的帖子
          avatar: 'https://picsum.photos/id/1005/200/200', // 使用伪图片URL
          ...postData,
          images: processedImages, // 使用处理后的图片数组
        };
        
        // 深拷贝帖子对象，避免引用问题
        const safeNewPost = JSON.parse(JSON.stringify(newPost));
        
        console.log('准备添加帖子到存储:', safeNewPost);
        this.posts.unshift(safeNewPost); // 添加到数组开头，使新帖子显示在最前面
        
        // 确保保存到存储
        this.savePostsToStorage();
        
        console.log('帖子添加成功，当前帖子数量:', this.posts.length);
        return safeNewPost;
      } catch (error) {
        console.error('添加帖子失败:', error.message, error.stack);
        return null;
      }
    },
    
    updatePost(id, updateData) {
      const index = this.posts.findIndex(post => post.id === id);
      if (index !== -1) {
        this.posts[index] = {
          ...this.posts[index],
          ...updateData,
          updatedAt: new Date().toISOString()
        };
        this.savePostsToStorage();
        return this.posts[index];
      }
      return null;
    },
    
    deletePost(id) {
      const index = this.posts.findIndex(post => post.id === id);
      if (index !== -1) {
        this.posts.splice(index, 1);
        this.savePostsToStorage();
        return true;
      }
      return false;
    },
    
    toggleLike(id) {
      const post = this.posts.find(post => post.id === id);
      if (post) {
        post.isLiked = !post.isLiked;
        post.likes += post.isLiked ? 1 : -1;
        this.savePostsToStorage();
        return post;
      }
      return null;
    },
    
    addComment(postId, commentText) {
      const post = this.posts.find(post => post.id === postId);
      if (post) {
        const newComment = {
          id: uuidv4(),
          text: commentText,
          createdAt: new Date().toISOString(),
          userName: '我'  // 模拟用户名
        };
        
        if (!post.comments) {
          post.comments = [];
        }
        
        post.comments.push(newComment);
        this.savePostsToStorage();
        return newComment;
      }
      return null;
    },
    
    loadPostsFromStorage() {
      try {
        const storedPosts = uni.getStorageSync('posts');
        if (storedPosts) {
          this.posts = JSON.parse(storedPosts);
        }
      } catch (e) {
        console.error('加载帖子数据失败:', e);
      }
    },
    
    savePostsToStorage() {
      try {
        uni.setStorageSync('posts', JSON.stringify(this.posts));
      } catch (e) {
        console.error('保存帖子数据失败:', e);
      }
    }
  }
}); 